package com.sanen.flyer.tool;

import com.sanen.flyer.common.CommonCallback;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TimeTool {
    private static SimpleDateFormat sdf;

    /**
     * 获取当前秒数
     *
     * @return
     */
    public static int getNow() {
        return (int) (System.currentTimeMillis() / 1000);
    }

    /**
     * 获取当前毫秒数
     *
     * @return
     */
    public static long getTime() {
        return System.currentTimeMillis();
    }

    /**
     * 获取今天零点时间秒数
     *
     * @return
     */
    public static long getTodayZero() {
        long now = System.currentTimeMillis();
//        因为地区时间不同,相差8小时,SO,再减8小时
        return (int)((now - now % (3600 * 24 * 1000) - 3600 * 8 * 1000)/1000);
    }

    /**
     * 获取当前日期时间 yyyy-MM-dd HH:mm
     */
    public static String getDateTime() {
        return time2Date(getTime(), "yyyy-MM-dd HH:mm");
    }

    /**
     * 获取当前日期 yyyy-MM-dd
     */
    public static String getDate() {
        return time2Date(getTime());
    }

    /**
     * 获取当前日期
     *
     * @param pattern 日期格式(eg:yyyy-MM-dd HH:mm)
     * @return
     */
    public static String getDate(String pattern) {
        return time2Date(getTime(), pattern);
    }

    /**
     * 时间戳转日期 yyyy-MM-dd
     *
     * @param time 时间戳 毫秒
     * @return
     */
    public static String time2Date(long time) {
        return getSdf().format(new Date(time));
    }

    /**
     * 时间戳转日期 默认格式yyyy-MM-dd
     *
     * @param time 时间戳 秒
     * @return
     */
    public static String time2Date(int time) {
        return getSdf().format(new Date(time * 1000l));
    }

    /**
     * 时间戳转日期
     *
     * @param time    时间戳(毫秒)
     * @param pattern 格式 如"yyyy-MM-dd"
     * @return
     */
    public static String time2Date(long time, String pattern) {
        SimpleDateFormat temp = new SimpleDateFormat(pattern);
        return temp.format(new Date(time));
    }

    /**
     * 时间戳转日期
     *
     * @param time    时间戳(秒)
     * @param pattern 格式 如"yyyy-MM-dd"
     * @return
     */
    public static String time2Date(int time, String pattern) {
        SimpleDateFormat temp = new SimpleDateFormat(pattern);
        return temp.format(new Date(time * 1000l));
    }

    public static int date2Time(String date) {
        Date d = null;
        try {
            d = getSdf().parse(date);
        } catch (ParseException e) {
            return 0;
        }
        return (int) (d.getTime() / 1000);
    }

    public static int date2Time(String date, String pattern) {
        Date d = null;
        try {
            SimpleDateFormat temp = new SimpleDateFormat(pattern);
            d = temp.parse(date);
        } catch (ParseException e) {
            return 0;
        }
        return (int) (d.getTime() / 1000);
    }

    private synchronized static SimpleDateFormat getSdf() {
        if (sdf == null)
            sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf;
    }

    /**
     * 计算函数执行时间
     * @param cb
     * @return
     */
    public static long testTime(CommonCallback cb){
        long start=getTime();
        cb.callback();
        long end=getTime();
        return end-start;
    }
    /**
     * 测试
     *
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(time2Date(1524153600, "yyyy-MM-dd HH:mm"));
    }
}
